package tools

import (
	"github.com/xuri/excelize/v2"
)

// ExportConfig 定义导出配置
type ExportConfig struct {
	SheetName string
	StartCell string
	FilePath  string
}

// ImportConfig 定义导入配置
type ImportConfig struct {
	SheetName string
	FilePath  string
}

// setDefault 设置导出配置的默认值
func (c *ExportConfig) setDefault() {
	if c.SheetName == "" {
		c.SheetName = "Sheet1"
	}
	if c.StartCell == "" {
		c.StartCell = "A1"
	}
}

// setDefault 设置导入配置的默认值
func (c *ImportConfig) setDefault() {
	if c.SheetName == "" {
		c.SheetName = "Sheet1"
	}
}

// ExportExcel 根据配置导出Excel文件。
func ExportExcel(data [][]interface{}, config *ExportConfig) error {
	config.setDefault()
	f := excelize.NewFile()
	index, err := f.NewSheet(config.SheetName)
	if err != nil {
		return err
	}
	// 计算起始单元格位置
	startCol, startRow, err := excelize.CellNameToCoordinates(config.StartCell)
	if err != nil {
		return err
	}

	// 填充数据
	for i, row := range data {
		for j, value := range row {
			cell, _ := excelize.CoordinatesToCellName(startCol+j, startRow+i)
			err := f.SetCellValue(config.SheetName, cell, value)
			if err != nil {
				return err
			}
		}
	}

	f.SetActiveSheet(index)
	if err := f.SaveAs(config.FilePath); err != nil {
		return err
	}
	return nil
}

// ImportExcel 根据配置导入Excel文件。
func ImportExcel(config *ImportConfig) ([][]string, error) {
	config.setDefault()

	f, err := excelize.OpenFile(config.FilePath)
	if err != nil {
		return nil, err
	}

	return f.GetRows(config.SheetName)
}
